package org.example.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.Map;

/**
 * 生成令牌和校验令牌的工具类
 */
@Component
public class JwtUtils {
    //签名常量
    public static final String SIGN = "waterMelonILo";//令牌生效时间 1小时
    private static final Long EXPIRE = 1000L * 60 * 60 * 24 ;

    /**
     * 生成JWT令牌
     * @param claims
     * @return
     */
    public  String generateJwt(Map<String, Object> claims){
        //设置 加密算法 和 签名
        //设置传参进来的MAP键值对数据
        //设置令牌过期的时间
        //创建令牌
        return Jwts.builder()
                //设置 加密算法 和 签名
                .signWith(SignatureAlgorithm.HS256,SIGN)
                //设置传参进来的MAP键值对数据
                .addClaims(claims)
                //设置令牌过期的时间
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE))
                //创建令牌
                .compact();
    }

    /**
     * 解析Jwt令牌
     * @param jwt
     * @return
     */
    public  Claims parseJwt(String jwt){
        return Jwts.parser().
                setSigningKey(SIGN)
                .parseClaimsJws(jwt)
                .getBody();
    }

}
